import { defineStore } from 'pinia';

// 获取本地存储的用户信息
const getStoredUserInfo = () => {
  try {
    const userInfoStr = localStorage.getItem('userInfo');
    return userInfoStr ? JSON.parse(userInfoStr) : { name: '健身用户' };
  } catch (e) {
    console.error('解析用户信息失败:', e);
    return { name: '健身用户' };
  }
};

export const useUserStore = defineStore('user', {
    state: () => {
        const hasToken = !!localStorage.getItem('userToken');
        console.log('UserStore初始化 - 检测到token:', hasToken);
        return {
            token: localStorage.getItem('userToken') || '',
            userInfo: hasToken ? getStoredUserInfo() : { name: '健身用户' },
            memberCard: {
                balance: 2340.00,
                expireDate: '2025-10-1'
            },
            isLoggedIn: hasToken
        };
    },
    actions: {
        logout() {
            console.log('UserStore - 执行登出');
            // 完全清除所有状态
            this.token = '';
            this.userInfo = { name: '健身用户' };
            this.isLoggedIn = false;
            
            // 清除所有相关的本地存储项
            localStorage.removeItem('userToken');
            localStorage.removeItem('userInfo');
            localStorage.removeItem('userId'); // 确保清除userId
            
            // 增加延迟以确保状态完全清除后再刷新
            setTimeout(() => {
                console.log('UserStore - 登出后刷新页面');
                window.location.reload();
            }, 300); // 增加延迟时间以确保状态完全清除
        },
        setUserInfo(userData) {
            console.log('=========== UserStore.setUserInfo 执行 ===========');
            console.log('当前时间戳:', Date.now());
            console.log('传入的用户数据:', {
                hasToken: !!userData.token,
                hasId: !!(userData.userId || userData.id || userData.uId)
            });
            
            // 执行前状态
            console.log('执行前状态:', {
                isLoggedIn: this.isLoggedIn,
                hasToken: !!this.token,
                getIsLoggedIn: this.getIsLoggedIn
            });
            
            // 深度复制用户数据，避免引用问题
            this.userInfo = { ...userData };
            
            // 优先使用用户数据中的token，如果没有则使用localStorage中的token
            const tokenToUse = userData.token || localStorage.getItem('userToken') || '';
            console.log('setUserInfo - 使用的token:', !!tokenToUse);
            
            // 更新token和登录状态
            this.token = tokenToUse;
            this.isLoggedIn = !!tokenToUse;
            
            // 确保localStorage中的token与store保持一致
            if (tokenToUse) {
                localStorage.setItem('userToken', tokenToUse);
                // 同时保存userId到localStorage
                const userId = userData.userId || userData.id || userData.uId;
                if (userId) {
                    localStorage.setItem('userId', String(userId));
                }
            }
            
            // 执行后状态
            console.log('执行后状态:', {
                isLoggedIn: this.isLoggedIn,
                hasToken: !!this.token,
                getIsLoggedIn: this.getIsLoggedIn
            });
            console.log('===============================================');
        },
        // 强制刷新状态 - 更健壮的实现
        refreshStatus() {
            console.log('=========== UserStore.refreshStatus 执行 ===========');
            console.log('当前时间戳:', Date.now());
            
            // 执行前状态
            console.log('执行前状态:', {
                isLoggedIn: this.isLoggedIn,
                hasToken: !!this.token,
                getIsLoggedIn: this.getIsLoggedIn
            });
            
            try {
                if (typeof window !== 'undefined' && window.localStorage) {
                    console.log('localStorage可用，执行刷新');
                    const token = localStorage.getItem('userToken');
                    const userInfoStr = localStorage.getItem('userInfo');
                    const hasToken = !!token;
                    const hasUserInfo = !!userInfoStr;
                    
                    console.log('从localStorage获取数据:', {
                        hasToken: hasToken,
                        hasUserInfo: hasUserInfo
                    });
                    
                    // 关键修复：直接设置token和isLoggedIn
                    this.token = token || '';
                    this.isLoggedIn = hasToken;
                    
                    if (hasToken && hasUserInfo) {
                        try {
                            const storedUserInfo = JSON.parse(userInfoStr);
                            this.userInfo = storedUserInfo;
                            console.log('成功恢复用户信息');
                        } catch (parseError) {
                            console.error('解析用户信息失败:', parseError);
                        }
                    }
                } else {
                    console.log('localStorage不可用，跳过刷新');
                }
            } catch (error) {
                console.error('刷新状态失败:', error);
            }
            
            // 执行后状态
            console.log('执行后状态:', {
                isLoggedIn: this.isLoggedIn,
                hasToken: !!this.token,
                getIsLoggedIn: this.getIsLoggedIn
            });
            console.log('================================================');
        }
    },
    // 添加getter以便组件更可靠地访问登录状态
    getters: {
        getIsLoggedIn() {
            return this.isLoggedIn && !!this.token;
        },
        // 添加userId getter，从userInfo中提取用户ID
        userId() {
            // 尝试从userInfo中获取ID的各种可能格式
            return this.userInfo?.userId || this.userInfo?.id || this.userInfo?.uId || localStorage.getItem('userId') || null;
        }
    }
});

// 只保留useUserStore，移除可能导致冲突的useAuthStore